/////////////////////////////////////////////////
// Book of Angels
// (c) Copyright 2013 Edward Principe
// All Rights Reserved
////////////////////////////////////////////////
#ifndef RTE_H
#define RTE_H

#include <Windows.h>
#include <tchar.h>
#include <errno.h>
#include "stdex.h"

///////////////////////////////////////////////
// Externals
///////////////////////////////////////////////////
#ifdef _UNICODE
extern wstring g_filename;
#else
extern string g_filename;
#endif

////////////////////////////////////////////////
// Err: Runtime errors
////////////////////////////////////////////////
enum Err
{
	ERR_CANT_OPEN_FILE,
	ERR_CANT_READ_FILE,
	ERR_CANT_WRITE_FILE,
	ERR_INTERNAL, // Internal error
	ERR_NONE=1000
};


/////////////////////////////////////////////
// RTE: RunTime Exception
/////////////////////////////////////////////
class RTE : public StdEx
{
public: // Construction
	RTE(Err err = ERR_NONE) : StdEx()
	{
		PutErr(err);
	}

	RTE(const RTE& rhs) : StdEx()
	{
		Copy(rhs);
	}

public: // Methods
	void PutErr(Err err); // Assigns an error to the class

public: // Accessor methods
	Err GetErr() const {return _err;}

public: // Operators
	RTE& operator = (const RTE& rhs)
	{
		Copy(rhs);
		return *this;
	}

protected: // Methods
	void Copy(const RTE& rhs)
	{
		if(this == &rhs)
			return;

		_err = rhs._err;

		StdEx::Copy(rhs);
	}

protected: // Attributes
	Err _err;
};
#endif